﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UniverseGenerator
{
	public class PlanetBuilderSW : PlanetBuilder
	{
		public override void setPlanetFunction(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = (dado1 * 10) + dado2;

			EPlanetFunction pf = EPlanetFunction.Invalid;

			if (valor == 11)
				pf = EPlanetFunction.AbandonedColony;
			else if (valor == 12)
				pf = EPlanetFunction.Academic;
			else if (valor == 13)
				pf = EPlanetFunction.Administrative;
			else if (valor >= 14 && valor <= 21)
				pf = EPlanetFunction.Agriculture;
			else if (valor == 22)
				pf = EPlanetFunction.Colony;
			else if (valor == 23)
				pf = EPlanetFunction.Disaster;
			else if (valor == 24)
				pf = EPlanetFunction.Entertainment;
			else if (valor == 25 || valor == 26)
				pf = EPlanetFunction.Exploration;
			else if (valor == 31)
				pf = EPlanetFunction.HiddenBase;
			else if (valor >= 32 && valor <= 33)
				pf = EPlanetFunction.Homeworld;
			else if (valor == 34)
				pf = EPlanetFunction.LuxuryGoods;
			else if (valor >= 35 && valor <= 41)
				pf = EPlanetFunction.Manufacturing;
			else if (valor == 42)
				pf = EPlanetFunction.Military;
			else if (valor >= 43 && valor <= 46)
				pf = EPlanetFunction.Mining;
			else if (valor >= 51 && valor <= 55)
				pf = EPlanetFunction.NaturalResources;
			else if (valor == 56)
				pf = EPlanetFunction.Research;
			else if (valor == 61)
				pf = EPlanetFunction.Service;
			else if (valor >= 62 && valor <= 63)
				pf = EPlanetFunction.Subsistence;
			else if (valor >= 64 && valor <= 66)
				pf = EPlanetFunction.Trade;

			if (pf == EPlanetFunction.Invalid)
				setPlanetFunction(p);
			else
				p.PlanetFunction = pf;
		}
		public override void setPlanetType(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			EPlanetType pt = EPlanetType.Invalid;

			if (valor >= 2 && valor <= 9)
				pt = EPlanetType.Terrestrial;
			else if (valor == 10)
				pt = EPlanetType.Satellite;
			else if (valor == 11)
				pt = EPlanetType.AsteroidBelt;
			else if (valor == 12)
				pt = EPlanetType.Artificial;

			if (pt == EPlanetType.Invalid)
				setPlanetType(p);
			else
				p.PlanetType = pt;
		}
		public override void setTerrain(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			ETerrain pt = ETerrain.Invalid;

			if (valor == 11)
				pt = ETerrain.Barren;
			else if (valor == 12 || valor == 13)
				pt = ETerrain.Cave;
			else if (valor == 14)
				pt = ETerrain.CraterField;
			else if (valor >= 15 && valor <= 16)
				pt = ETerrain.Desert;
			else if (valor >= 21 && valor <= 24)
				pt = ETerrain.Forest;
			else if (valor >= 25 && valor <= 26)
				pt = ETerrain.Glacier;
			else if (valor >= 31 && valor <= 32)
				pt = ETerrain.Jungle;
			else if (valor >= 33 && valor <= 34)
				pt = ETerrain.Mountain;
			else if (valor >= 35 && valor <= 41)
				pt = ETerrain.Ocean;
			else if (valor >= 42 && valor <= 44)
				pt = ETerrain.Plain;
			else if (valor >= 45 && valor <= 46)
				pt = ETerrain.Plateau;
			else if (valor >= 51 && valor <= 52)
				pt = ETerrain.Urban;
			else if (valor >= 53 && valor <= 61)
				pt = ETerrain.Wetlands;
			else if (valor >= 62 && valor <= 63)
				pt = ETerrain.Volcanic;
			else if (valor >= 64 && valor <= 66)
				pt = ETerrain.Special;

			if (pt == ETerrain.Invalid)
				setTerrain(p);
			else
				p.Terrain = pt;

		}
		public override void setGravity(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			EGravity g = EGravity.Invalid;

			if (valor == 2)
				g = EGravity.Zero;
			else if (valor == 3 || valor == 4)
				g = EGravity.Light;
			else if (valor >= 5 && valor <= 11)
				g = EGravity.Standard;
			else if (valor == 12)
				g = EGravity.Heavy;

			if (g == EGravity.Invalid)
				setGravity(p);
			else
				p.Gravity = g;
		}
		public override void setHydrosphere(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			EHydrosphere var = EHydrosphere.Invalid;

			if (valor == 2)
				var = EHydrosphere.Arid;
			else if (valor >= 3 && valor <= 4)
				var = EHydrosphere.Dry;
			else if (valor >= 5 && valor <= 9)
				var = EHydrosphere.Moderate;
			else if (valor >= 10 && valor <= 11)
				var = EHydrosphere.Moist;
			else if (valor == 12)
				var = EHydrosphere.Saturated;

			if (var == EHydrosphere.Invalid)
				setHydrosphere(p);
			else
				p.Hydrosphere = var;
		}
		public override void setAtmosphere(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			EAtmosphere var = EAtmosphere.Invalid;

			if (valor == 2)
				var = EAtmosphere.None;
			else if (valor >= 3 && valor <= 9)
				var = EAtmosphere.TypeI;
			else if (valor == 10)
				var = EAtmosphere.TypeII;
			else if (valor == 11)
				var = EAtmosphere.TypeIII;
			else if (valor == 12)
				var = EAtmosphere.TypeIV;

			if (var == EAtmosphere.Invalid)
				setAtmosphere(p);
			else
				p.Atmosphere = var;
		}
		public override void setTemperature(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			ETemperature var = ETemperature.Invalid;

			if (valor == 2)
				var = ETemperature.Searing;
			else if (valor >= 3 && valor <= 4)
				var = ETemperature.Hot;
			else if (valor >= 5 && valor <= 9)
				var = ETemperature.Temperate;
			else if (valor >= 10 && valor <= 11)
				var = ETemperature.Cool;
			else if (valor == 12)
				var = ETemperature.Frigid;

			if (var == ETemperature.Invalid)
				setTemperature(p);
			else
				p.Temperature = var;
		}
		public override void setLengthOfDay(Planet p)
		{
			int valor = Dado.d(6);
			int var = 0;

			if (valor >= 1 && valor <= 2)
				var = Dado.d(6) + Dado.d(6) + 10;
			else if (valor >= 3 && valor <= 4)
				var = Dado.d(6) + 20;
			else if (valor == 5)
				var = Dado.d(6) + 25;
			else if (valor == 6)
				var = Dado.d(6) + 30;

			if (var == 0)
				setLengthOfDay(p);
			else
				p.LengthOfDay = var;
		}
		public override void setLengthOfYear(Planet p)
		{
			int valor1 = Dado.d(6);
			int valor2 = Dado.d(6);
			int var = 0;

			if (valor2 == 1)
				var += 75;
			else if (valor2 == 2)
				var += 150;
			else if (valor2 >= 3 && valor2 <= 4)
				var += 225;
			else if (valor2 == 5)
				var += 300;
			else if (valor2 == 6)
				var += 375;

			if (var == 0)
				setLengthOfDay(p);
			else
				p.LengthOfYear = (valor1 * 15) + var;
		}
		public override void setGovernment(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			EGovernment pt = EGovernment.Invalid;

			if (valor == 11)
				pt = EGovernment.Alliance;
			else if (valor == 12)
				pt = EGovernment.Anarchy;
			else if (valor >= 13 && valor <= 16)
				pt = EGovernment.CompetingStates;
			else if (valor >= 21 && valor <= 22)
				pt = EGovernment.CorporateOwned;
			else if (valor >= 23 && valor <= 24)
				pt = EGovernment.Dictatorship;
			else if (valor == 25)
				pt = EGovernment.Family;
			else if (valor >= 26 && valor <= 31)
				pt = EGovernment.Feudalism;
			else if (valor == 32)
				pt = EGovernment.Guilds;
			else if (valor >= 33 && valor <= 42)
				pt = EGovernment.ImperialGovernor;
			else if (valor >= 43 && valor <= 45)
				pt = EGovernment.Military;
			else if (valor >= 46 && valor <= 52)
				pt = EGovernment.Monarchy;
			else if (valor == 53)
				pt = EGovernment.OrganizedCrime;
			else if (valor == 54)
				pt = EGovernment.ParticipatoryDemocracy;
			else if (valor == 55)
				pt = EGovernment.RebelAlliance;
			else if (valor == 56)
				pt = EGovernment.RepresentativeDemocracy;
			else if (valor == 61)
				pt = EGovernment.RulerBySelection;
			else if (valor == 62)
				pt = EGovernment.Theocracy;
			else if (valor >= 63 && valor <= 66)
				pt = EGovernment.Tribal;

			if (pt == EGovernment.Invalid)
				setGovernment(p);
			else
				p.Government = pt;
		}
		public override void setPopulation(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			long v1 = 0, v2 = 0;

			if (dado1 == 1)
				v1 = 1;
			else if (dado1 >= 2 || dado1 <= 3)
				v1 = 1000;
			else if (dado1 >= 4 || dado1 <= 5)
				v1 = 1000000;
			else
				v1 = 1000000000;

			switch (dado2)
			{
				case 1:
				case 2:
					v2 = Dado.d(1, 9);
					break;
				case 3:
				case 4:
					v2 = Dado.d(10, 90);
					break;
				default:
					v2 = Dado.d(100, 900);
					break;
			}

			p.Population = v1 * v2;

		}
		public override void setStarport(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			EStarport pt = EStarport.Invalid;

			switch (valor)
			{
				case 2:
					pt = EStarport.LandingField;
					break;
				case 3:
				case 4:
				case 5:
					pt = EStarport.LimitedServices;
					break;
				case 6:
				case 7:
				case 8:
					pt = EStarport.StandardClass;
					break;
				case 9:
				case 10:
				case 11:
					pt = EStarport.StellarClass;
					break;
				default:
					pt = EStarport.ImperialClass;
					break;
			}

			p.Starport = pt;
		}
		public override void setTechLevel(Planet p)
		{
			int dado1 = Dado.d(6);
			int dado2 = Dado.d(6);
			int valor = dado1 + dado2;

			ETechLevel pt = ETechLevel.Invalid;

			switch (valor)
			{
				case 2:
					pt = ETechLevel.Stone;
					break;
				case 3:
					pt = ETechLevel.Feudal;
					break;
				case 4:
					pt = ETechLevel.Industrial;
					break;
				case 5:
					pt = ETechLevel.Atomic;
					break;
				case 6:
				case 7:
					pt = ETechLevel.Information;
					break;
				default:
					pt = ETechLevel.Hyperspace;
					break;
			}

			p.TechLevel = pt;
		}
	}
}
